package com.example.demo.leeCode;

import java.util.Arrays;

/**
 * 请根据每日 气温 列表，重新生成一个列表。对应位置的输出为：要想观测到更高的气温，至少需要等待的天数。如果气温在这之后都不会升高，请在该位置用 0 来代替。
 * <p>
 * 例如，给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]，你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
 * <p>
 * 提示：气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度，都是在 [30, 100] 范围内的整数。
 */
public class DailyTemperatures {
    public static void main(String[] args) {
        int[] dailys = new int[]{73, 74, 75, 71, 69, 72, 76, 73};
        int[] ss = new DailyTemperatures().dailyTemperatures2(dailys);

        for (int i = 0; i < dailys.length; i++) {
            System.out.print(ss[i] + ",");
        }
    }

    public int[] dailyTemperatures(int[] T) {
        int[] details = new int[T.length];
        int days = 0;
        for (int i = 0; i < T.length; i++) {
            if (i == T.length - 1) {
                details[i] = 0;
                break;
            }
            days = 1;
            for (int k = i + 1; k < T.length; k++) {
                if (T[i] < T[k]) {
                    break;
                }
                if (k == T.length - 1) {
                    days = 0;
                    break;
                }
                days++;
            }
            details[i] = days;
        }
        return details;
    }

    public int[] dailyTemperatures2(int[] T) {
        int length = T.length;
        int[] ans = new int[length];
        int[] next = new int[101];
        Arrays.fill(next, Integer.MAX_VALUE);
        for (int i = length - 1; i >= 0; --i) {
            int warmerIndex = Integer.MAX_VALUE;
            for (int t = T[i] + 1; t <= 100; ++t) {
                if (next[t] < warmerIndex) {
                    warmerIndex = next[t];
                }
            }
            if (warmerIndex < Integer.MAX_VALUE) {
                ans[i] = warmerIndex - i;
            }
            next[T[i]] = i;
        }
        return ans;
    }

}
